package com.xtianzhuang.www.study2019.practice.leetcode.algorithm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

/**
 * 
 * @author 18502
 *
 */
public class Question17 {
	public static void main(String[] args) {
		Question17 funcQuestion17 = new Question17();
		System.out.println(JSON.toJSONString(funcQuestion17.letterCombinations("232")));
	}
	Map<String, String> map;
	public List<String> letterCombinations(String digits) {
		init();
		String[] strs = digits.split("");
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < strs.length; i++) {
			if (i == 0) {
				if (strs[0].equals("2")) {
					list.add("a");
					list.add("b");
					list.add("c");
				} else if (strs[0].equals("3")) {
					list.add("d");
					list.add("e");
					list.add("f");
				} else if (strs[0].equals("4")) {
					list.add("g");
					list.add("h");
					list.add("i");
				} else if (strs[0].equals("5")) {
					list.add("j");
					list.add("k");
					list.add("l");
				} else if (strs[0].equals("6")) {
					list.add("m");
					list.add("n");
					list.add("o");
				} else if (strs[0].equals("7")) {
					list.add("p");
					list.add("q");
					list.add("r");
					list.add("s");
				} else if (strs[0].equals("8")) {
					list.add("t");
					list.add("u");
					list.add("v");
				} else if (strs[0].equals("9")) {
					list.add("w");
					list.add("x");
					list.add("y");
					list.add("z");

				}
			}else {
				list = letterCombinations(strs[i], list);
			}
		}
		return list;
	}

	void init() {
		map = new HashMap<String, String>();
		map.put("2", "abc");
		map.put("3", "def");
		map.put("4", "ghi");
		map.put("5", "jkl");
		map.put("6", "mno");
		map.put("7", "pqrs");
		map.put("8", "tuv");
		map.put("9", "wxyz");
	}

	public List<String> letterCombinations(String item, List<String> list) {
		List<String> list2 = new ArrayList<String>();
		for (String item2 : list) {
			String item3 = map.get(item);
			String[] strs = item3.split("");
			for (String item4 : strs) {
				list2.add(item2 + item4);
			}
		}

		return list2;
	}
}
